#include <stdio.h>


int len(int);
int main(void){
	int floor;
	int length;
	int index_top_begin,index_pre_begin;
	printf("输入要打印多少层：");
	scanf("%d",&floor);
	if(floor<0){
		printf("输入错误\n");
		return 0;
	}
	length=len(floor);
	printf("申请长度：%d\n",length);
	int num[length];                                    //通过计算出的长度申请数组
	for(int i=0;i<floor;i++){
		if(i==0){										//第一行固定为1
			num[0]=1;
		}
		else{                                           
			index_top_begin=len(i-1);                   //计算当前行的上一行的数据是从哪个索引开始的
			index_pre_begin=len(i);                     //计算当前行的数据是从哪个索引开始的
//			printf("%d  %d  %d\n",i,index_top_begin,index_pre_begin);
			num[index_pre_begin]=num[index_pre_begin+i]=1;//剩下的所有行首尾都是1
			for(int j=1;j<i;j++){

				num[index_pre_begin+j]=num[index_top_begin+j-1]+num[index_top_begin+j];//循环计算当前行的值
				
			}


		}
	}
	//打印杨辉三角
	for(int i=0;i<floor;i++){
		int index=len(i);
		for(int j=0;j<floor-i;j++){
			printf("   ");
		}
		for(int j=index;j<=index+i;j++){
			printf("  %d  ",num[j]);
		}
		printf("\n");
	}
	printf("\n");
	return 0;
}

//定义函数，计算杨辉三角第n行往前所有行的数据量
int len(int floor){
	int len;
	len=(floor*floor+floor)/2;
	return len;
}
